/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Adkiraki;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.jdo.PersistenceManager;
import javax.servlet.http.HttpSession;

/**
 *
 * @author pauloferreira
 */
public class ProdutoBean {
    
    private Long categoriaId;
    private String nome;
    private String descricao;
    private Float valor;
    private Boolean ativo;
    private Long usuarioId;
    
    // Construtor
    public ProdutoBean() { 
        this.categoriaId = null;
        this.nome = "";
        this.descricao = "";
        this.valor = 0%.2f;
        this.ativo = true;
        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
        Usuario usuario = (Usuario)session.getAttribute(Usuario.class.getName());
        this.usuarioId = usuario.getUsuarioId();
    }
    
    public String Salvar() {
        FacesContext context = FacesContext.getCurrentInstance();
        ResourceBundle bundle =
                ResourceBundle.getBundle("Adkiraki.mensagens",
                    context.getViewRoot().getLocale());

        String msg = "";
        String query = "";
        PersistenceManager pm = PMF.get().getPersistenceManager();
        List<Produto> lProduto;
        
        Date data = new Date();
        SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
        formatador.format(data);

        // Testar se Produto caso já exista
        query = "select from " + Produto.class.getName() + " where nome == '" + this.nome + "'";
        lProduto = (List<Produto>) pm.newQuery(query).execute();

        for(Produto p : lProduto) 
        {
            if (p.getUsuarioId().equals(this.usuarioId))
            {
                msg = bundle.getString("produto_duplicate");
                context.addMessage (null, new FacesMessage(msg));        
                pm.close();
                return null;
            }
        }
        
        //query = "select from " + Categoria.class.getName() + " where categoriaId == " + this.categoriaId;
        //List<Categoria> lCategoria = (List<Categoria>) pm.newQuery(query).execute();
        
        Produto produto = new Produto(categoriaId, this.nome, this.descricao, this.valor, this.ativo, data, this.usuarioId);
        pm.makePersistent(produto);
        pm.close();

        this.categoriaId = null;
        this.nome = "";
        this.descricao = "";
        this.valor = 0%.2f;

        return "produtos";
    }
   
    public String SetProduto() {
        PersistenceManager pm = PMF.get().getPersistenceManager();
        String query = "select from " + Produto.class.getName() + " where nome == '" + this.nome + "'";                
        List<Produto> lProduto = (List<Produto>) pm.newQuery(query).execute();

        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
        session.setAttribute(Produto.class.getName(), lProduto.get(0));            
        pm.close();
        return "negociar";
    }
    
    /**
     * @return the categoria
     */
    public Long getCategoriaId() {
        return categoriaId;
    }

    /**
     * @param categoria the categoria to set
     */
    public void setCategoriaId(Long categoriaId) {
        this.categoriaId = categoriaId;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the valor
     */
    public Float getValor() {
        return valor;
    }

    /**
     * @param valor the valor to set
     */
    public void setValor(Float valor) {
        this.valor = valor;
    }

    /**
     * @return the ativo
     */
    public Boolean getAtivo() {
        return ativo;
    }

    /**
     * @param ativo the ativo to set
     */
    public void setAtivo(Boolean ativo) {
        this.ativo = ativo;
    }

    /**
     * @return the usuario
     */
    public Long getUsuarioId() {
        return usuarioId;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Long usuario) {
        this.usuarioId = usuarioId;
    }
 }
